/***********************************************************************************
 * 文件名： pid_static_config.h
 * 作者： 	刘言
 * 版本： 	2
 * 说明：
 * 		PID算法计算器，静态时现（单例模式），一个项目中需要用到多组PID参数请使用面向对
 * 	象设计的pid.c。
 * 		PID 计算方法： 控制（输出）值的变化量 = 
 * 				  比例系数 * 偏差值 
 * 				+ 积分系数 * 偏差累加值 
 * 				+ 微分系数 * (偏差值 - 上一个偏差值)
 * 		
 * 修改记录：
 * 	20201106: 初版
 *  20220622: 预处理计算确定最合适的变量类型。
***********************************************************************************/
#ifndef _PID_STATIC_CONFIG_H_
#define _PID_STATIC_CONFIG_H_


// 定义表示启用浮点运算（被控量和控制量都是float型）。
// #define _PID_USE_FLOAT


#ifndef _PID_USE_FLOAT
// 被控量（输入）的数据可能的最大值(绝对值)。
// PID组件依据这个值和PID系数来确定整型变量的位数，合理的设置可以节省ROM和RAM。
// 技巧：考虑让PID控制ADC采样值，而不是计算后的电压、温度等。
#define _PID_INPUT_MAX      4095

// 系数的缩小比例
// 下文的P.I.D系数将在设置值上除以这个值。建议设置为2的整数倍可以节省代码量。
#define _PID_SCALE           1024
#endif

// 比例系数（P），未启用浮点时单位是1/_PID_SCALE
#define _PID_KP	    8
// 积分系数（I），未启用浮点时单位是1/_PID_SCALE
#define _PID_KI	    0
// 微分系数（D），未启用浮点时单位是1/_PID_SCALE
#define _PID_KD	    3

//偏差累加值（积分）上限
#define _PID_MAX_INTE_VALUE	        0
//偏差累加值（积分）下限
#define _PID_MIN_INTE_VALUE	        (-0)

//启用动态积分，注释掉表示不启用【未测试】
//#define _PID_USE_DYNAMIC_INTEGRAL		
#ifdef _PID_USE_DYNAMIC_INTEGRAL
	#define _PID_NO_INTEGRAL_VALUE          4		//偏差大于这个值去掉积分
	#define _PID_FULL_INTEGRAL_VALUE	    2		//偏差小于这个值正常积分
	#define _PID_NO_INTEGRAL_IN_START		        //启用“启动时关闭积分”；注释掉表示不启用，积分始终有效。
#endif





#endif
